#include <stdio.h>

/*
    串 首位空间不用 位序与下标相等
    StrCompare(S, T)  比较操作 S>T return > 0 否则 < 0 或 = 0
*/

// 顺序存储 静态

#define MAXLEN 255
typedef struct
{
    char ch[MAXLEN];
    int length;
}SString;


// // 顺序存储 动态

// typedef struct 
// {
//     char *ch;
//     int length;
// }HString;

// HString S;
// S.ch = (char *)malloc(MAXLEN * sizeof(char))

 
void StrAssign(SString &T, SString chars) // 赋值
{
    T = chars;
}

void StrCopy(&T, S) // 拷贝
{
    T = S;
}

bool StrEmpty(SString S)
{
    return S == ''
}

int StrLength(SString S)
{
    return S.length;
}

void ClearString(SString &S)
{
    S.length = 0;
}

void DestroyString(SString &S)
{
    free(S);
};

Concat(SString &T, SString S1, SString S2)
{
    T = S1 + S2;
    return T;
}

void SubString(&Sub, SString S, int pos, int len)  // 截取子串
{
    if(pos + len-1 > S.length) // 越界
    {
        return false;
    }

    for(int i=pos; i<pos+len; i++)
    {
        Sub.ch[i-pos + 1] = S.ch[i];  // 空间S.ch[0] 不使用
    }

    Sub.length = len;

    return true;
}

int StrCompare(SString S, SString T)
{
    for(int i=1; i<=S.length && i<= T.length; i++)
    {
        if(S.ch[i] != T.ch[i])
        {
            return S.ch[i] - T.ch[i];
        }
    }

    return S.length-T.length; // 扫描的所有字符都相同 长度大的串更大

}

int Index(SString S, SString T)
{
    int i=1, n=StrLength(S), m=StrLength(T);
    SString sub; // 暂存子串

    while(i <= n-m +1)
    {
        SubString(sub, S, i, m);
        if(StrCompare(sub, T) != 0)
        {
            ++i;
        }
        else
        {
            return i;
        }
    }

    return 0;
}